#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QTcpSocket> //网络通信套接字
#include<QFileDialog> //弹出文件选择框
#include<QFile> //用于文件操作
#include<QMessageBox>
#include<QDebug>


#define HEADER_SIZE 5
#define MSG_TEXT 'T'
#define FILE_UPLOAD 'U'
#define FILE_DOWNLOAD 'D'


QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    //声明槽函数
    void onConnectBtnClicked(); //处理连接按钮点击
    void onDisconnectBtnClicked(); //处理退出按钮点击
    void onSendBtnClicked(); //处理发送按钮点击
    void onReadyRead(); //响应套接字的readyRead信号
    void onUploadBtnClicked();  //处理文件上传按钮点击
    void on_DownloadBtn_clicked(); //处理文件下载按钮点击

private:
    Ui::Widget *ui;
    QTcpSocket *socket;
    QByteArray recvBuffer; //接收服务端消息的缓冲区
    QString downloadFilePath;
    qint32 fileSize = 0; //请求下载文件的总大小
    qint64 recvedFileSize = 0; //已接收到的文件内容大小
    bool isRecvingFile = false; //是否处于文件接收模式
    void handleFileDownload();

};
#endif // WIDGET_H
